package com.jiangxjsy.admin.mapper;

import com.jiangxjsy.core.page.BasePage;
import com.jiangxjsy.model.admin.bo.AdminUserBO;
import com.jiangxjsy.model.admin.entity.AdminUser;
import com.jiangxjsy.model.admin.vo.AdminUserVO;
import com.jiangxjsy.model.admin.vo.HrmSimpleUserVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;

/**
 * wukong-crm-master
 * 蒋胜宇
 * 2025/6/6 16:12
 */

public interface AdminUserMapper {
    /**
     * 根据用户名查询用户信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    List<Map<String,Object>> selectByUsername(@Param("username") String username);

    /**
     * 根据用户 id 查询用户信息
     *
     * @param userId 用户 id
     * @return 用户信息
     */
    @Select("select * from wk_admin_user where user_id = #{userId}")
    AdminUser selectByUserId(@Param("userId") Long userId);

    /**
     * 根据用户 id 修改用户状态
     *
     * @param userId 用户 id
     * @param status 状态
     * @return 受影响行数
     */
    @Update("update wk_admin_user set status = #{status} where user_id = #{userId}")
    Integer updateStatusByUserId(@Param("userId") Long userId, @Param("status") Integer status);

    /**
     * 查询用户总数
     *
     * @return 用户总数
     */
    @Select("select count(1) from wk_admin_user")
    Long selectCount();

    /**
     * 查询非超级管理员用户
     *
     * @param superUserId 超级管理员 id
     * @return 非超级管理员用户
     */
    @Select("select * from wk_admin_user where user_id != #{superUserId}")
    List<AdminUser> selectNonSuperUsers(@Param("superUserId") Long superUserId);

    /**
     * 查询用户列表
     *
     * @param page 分页信息
     * @param adminUserBO 查询条件
     * @return 用户列表分页封装
     */
    List<AdminUserVO> selectUserList(BasePage<AdminUserVO> page, @Param("data") AdminUserBO adminUserBO);

    /**
     * 根据标签和状态查询用户数量
     *
     * @param label 标签
     * @param status 状态
     * @return 用户数量
     */
    Integer countUserByLabel(@Param("label") Integer label,@Param("status") Integer status);

    /**
     * 根据部门 id 查询部门用户
     *
     * @param deptId 部门 id
     * @return 部门用户
     */
    List<HrmSimpleUserVO> selectSimpleUserByDeptId(@Param("deptId") Integer deptId);

    /**
     * 根据部门 id 和 examine 查询部门用户
     *
     * @param deptId 部门 id
     * @return 部门用户
     */
    List<HrmSimpleUserVO> selectSimpleUserByDeptIdAndExamine(@Param("deptId") Integer deptId);

    /**
     * 根据用户名查询用户数量
     *
     * @param username 用户名
     * @return 用户数量
     */
    @Select("select count(1) from wk_admin_user where username = #{username}")
    Integer selectCountByUsername(@Param("username") String username);

    /**
     * 根据真实姓名查询用户数量
     *
     * @param realname 真实姓名
     * @return 用户数量
     */
    @Select("select count(1) from wk_admin_user where realname = #{realname}")
    Integer selectCountByRealname(@Param("realname") String realname);

    /**
     * 添加用户
     *
     * @param adminUser 用户信息
     * @return 添加结果
     */
    Integer insertAdminUser(@Param("adminUser") AdminUser adminUser);
}
